package com.decent.manager.system.controller;

import com.decent.common.bo.MessageBean;
import com.decent.common.enums.ErrorCodeEnum;
import com.decent.manager.system.dto.SystemBrandDTO;
import com.decent.manager.system.service.SystemBrandService;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 系统品牌管理接口
 * @author: decent Gjh
 * @date: 2022/10/25/18:33
 * @description:
 */
@RequestMapping("brand")
@RestController
@Slf4j
@CrossOrigin
public class SystemBrandController {
    private final SystemBrandService brandService;

    public SystemBrandController(SystemBrandService brandService) {
        this.brandService = brandService;
    }

    /**
     * 增加品牌
     * args：
     *   name	string 品牌名
     *   sort int 顺序
     *   classifyId 所属分类的id
     * @param brandDTO 品牌信息
     * @param result result
     * @return 返回是否成功
     */
    @PostMapping()
    public MessageBean addBrand(@Validated(Insert.class) SystemBrandDTO brandDTO , BindingResult result) {
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return brandService.insertBrand(brandDTO);
    }

    /**
     * 删除品牌
     * args：
     *   id int 品牌id
     * @param brandDTO 品牌信息
     * @param result    result
     * @return 是否成功
     */
    @DeleteMapping
    public MessageBean deleteBrand(@Validated(Delete.class) SystemBrandDTO brandDTO, BindingResult result) {
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return brandService.deleteBrand(brandDTO);
    }

    /**
     * 更新品牌
     * args：
     *   id int 品牌id
     *   name string 品牌名
     *   sort int 顺序
     *   classifyId 所属分类的id
     * @param brandDTO 品牌信息
     * @param result result
     * @return 是否成功
     */
    @PutMapping
    public MessageBean updateBrand(@Validated(Update.class) SystemBrandDTO brandDTO, BindingResult result){
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return brandService.updateBrand(brandDTO);
    }


    /**
     * 查找品牌
     * @param brandDTO 查找条件
     * @param result result
     * @return 品牌信息
     */
    @GetMapping
    public MessageBean selectBrand(@Validated(Select.class) SystemBrandDTO brandDTO, BindingResult result){
        if (result.hasErrors()){
            return new MessageBean(ErrorCodeEnum.INVALID_PARAMS, result.getAllErrors().get(0).getDefaultMessage());
        }
        return brandService.selectBrand(brandDTO);
    }
}
